All four decorators can be applied at method level, controller (class) level, or globally. The key execution-order difference is that guards, interceptors, and pipes run global → controller → method, while exception filters resolve method → controller → global with the most specific filter winning.
Guards — global → controller → method. All must pass for the request to continue.
Interceptors — global → controller → method (pre). Method → controller → global (post).
Pipes — global → controller → method. Each processes its bound parameter.
Filters — method → controller → global. First matching @Catch() type wins.
app.useGlobal*() registers without DI support; APP_* tokens register with full DI.